import React from 'react';
import { Button, Dropdown, Space } from 'antd';
import { DownloadOutlined } from '@ant-design/icons';
import type { MenuProps } from 'antd';
import type { DashboardData } from '@/api/dashboard';
import * as XLSX from 'xlsx';

interface DataExportProps {
  data: DashboardData;
  dateRange: [string, string];
}

const DataExport: React.FC<DataExportProps> = ({ data, dateRange }) => {
  const exportToExcel = (type: string) => {
    let exportData: any[] = [];
    const [startDate, endDate] = dateRange;

    switch (type) {
      case 'users':
        exportData = [
          {
            指标: '总用户数',
            数值: data.totalUsers,
          },
          {
            指标: '活跃用户',
            数值: data.activeUsers,
          },
          {
            指标: '今日新增用户',
            数值: data.newUsersToday,
          },
          {
            指标: '本月新增用户',
            数值: data.newUsersThisMonth,
          },
        ];
        break;

      case 'articles':
        exportData = [
          {
            指标: '总文章数',
            数值: data.totalArticles,
          },
          {
            指标: '已发布文章',
            数值: data.publishedArticles,
          },
          {
            指标: '草稿箱',
            数值: data.draftArticles,
          },
          {
            指标: '本月新增',
            数值: data.newArticlesThisMonth,
          },
        ];
        break;

      case 'categories':
        exportData = data.topCategories.map((category) => ({
          分类名称: category.categoryName,
          文章数: category.articleCount,
          访问量: category.viewCount,
        }));
        break;

      case 'tags':
        exportData = data.topTags.map((tag) => ({
          标签名称: tag.tagName,
          文章数: tag.articleCount,
          访问量: tag.viewCount,
        }));
        break;

      case 'all':
        const workbook = XLSX.utils.book_new();
        
        // 用户数据
        XLSX.utils.book_append_sheet(
          workbook,
          XLSX.utils.json_to_sheet([
            {
              指标: '总用户数',
              数值: data.totalUsers,
            },
            {
              指标: '活跃用户',
              数值: data.activeUsers,
            },
            {
              指标: '今日新增用户',
              数值: data.newUsersToday,
            },
            {
              指标: '本月新增用户',
              数值: data.newUsersThisMonth,
            },
          ]),
          '用户统计'
        );

        // 文章数据
        XLSX.utils.book_append_sheet(
          workbook,
          XLSX.utils.json_to_sheet([
            {
              指标: '总文章数',
              数值: data.totalArticles,
            },
            {
              指标: '已发布文章',
              数值: data.publishedArticles,
            },
            {
              指标: '草稿箱',
              数值: data.draftArticles,
            },
            {
              指标: '本月新增',
              数值: data.newArticlesThisMonth,
            },
          ]),
          '文章统计'
        );

        // 分类数据
        XLSX.utils.book_append_sheet(
          workbook,
          XLSX.utils.json_to_sheet(
            data.topCategories.map((category) => ({
              分类名称: category.categoryName,
              文章数: category.articleCount,
              访问量: category.viewCount,
            }))
          ),
          '分类统计'
        );

        // 标签数据
        XLSX.utils.book_append_sheet(
          workbook,
          XLSX.utils.json_to_sheet(
            data.topTags.map((tag) => ({
              标签名称: tag.tagName,
              文章数: tag.articleCount,
              访问量: tag.viewCount,
            }))
          ),
          '标签统计'
        );

        // 趋势数据
        const trendData = Object.entries(data.userTrend).map(([date, value]) => ({
          日期: date,
          用户增长: data.userTrend[date],
          文章发布: data.articleTrend[date],
          访问量: data.viewTrend[date],
          评论数: data.commentTrend[date],
        }));
        XLSX.utils.book_append_sheet(
          workbook,
          XLSX.utils.json_to_sheet(trendData),
          '趋势数据'
        );

        XLSX.writeFile(workbook, `仪表盘数据-${startDate}-${endDate}.xlsx`);
        return;
    }

    if (type !== 'all' && exportData.length > 0) {
      const worksheet = XLSX.utils.json_to_sheet(exportData);
      const workbook = XLSX.utils.book_new();
      XLSX.utils.book_append_sheet(workbook, worksheet, '数据');
      XLSX.writeFile(workbook, `${type}-${startDate}-${endDate}.xlsx`);
    }
  };

  const items: MenuProps['items'] = [
    {
      key: 'users',
      label: '导出用户数据',
      onClick: () => exportToExcel('users'),
    },
    {
      key: 'articles',
      label: '导出文章数据',
      onClick: () => exportToExcel('articles'),
    },
    {
      key: 'categories',
      label: '导出分类数据',
      onClick: () => exportToExcel('categories'),
    },
    {
      key: 'tags',
      label: '导出标签数据',
      onClick: () => exportToExcel('tags'),
    },
    {
      type: 'divider',
    },
    {
      key: 'all',
      label: '导出全部数据',
      onClick: () => exportToExcel('all'),
    },
  ];

  return (
    <Dropdown menu={{ items }} placement="bottomRight">
      <Button icon={<DownloadOutlined />}>导出数据</Button>
    </Dropdown>
  );
};

export default DataExport; 